package cn.theten52.demo.patterns.design.behavior.memento.update1;

/**
 * 发起者对象接口 * *如果没有类型擦除，就可以这样定义：
 * interface Originator<T extends State,M extends Memento<T>>
 * 然后通过M.class获得备忘录对象的类型
 *
 * @author wangjin
 * @date 2021/4/4
 */
public interface Originator<T extends State> {
    //设置备忘录类型
    Originator<T> setMementoType(Class<?> clazz);

    //从备忘录恢复之前的状态
    Memento<T> get() throws InstantiationException, IllegalAccessException;

    //把状态保存到备忘录
    void set(Memento<T> memento);

    //访问和变更当前状态的操作
    Originator<T> decrease();

    Originator<T> increase();

    int current();
}


